import sys
from PySide6.QtWidgets import (QWidget, QApplication, QPushButton, QVBoxLayout,
                               QLabel, QListWidget, QLineEdit, QListView,QListWidgetItem,QMessageBox)
from PySide6.QtCore import Qt


class MyMainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setup_ui()

    def setup_ui(self):
        self.resize(800, 600)

        # 创建一个垂直布局
        vbox = QVBoxLayout(self)
        list_view = QListWidget()
        # 创建按钮和输入框
        add_btn = QPushButton('增加')
        clear_btn = QPushButton('清空')
        del_btn = QPushButton('删除')
        input_text = QLineEdit("请输入")

        # 添加到垂直布局中
        vbox.addWidget(list_view)
        vbox.addWidget(input_text)
        vbox.addWidget(add_btn)
        vbox.addWidget(del_btn)
        vbox.addWidget(clear_btn)

        # 把input输入框设置为self的属性
        self.input_text = input_text
        # 把list——widgets设置为self的属性
        self.list_widget = list_view

        # 按钮设置槽函数
        add_btn.clicked.connect(self.add_text)
        # 删除
        del_btn.clicked.connect(self.del_context)
        # 清空
        clear_btn.clicked.connect(self.clear_context)

        # 1， 获取到选中的项
        # itemcliecked绑定槽函数获取到被点击的项
        self.list_widget.itemClicked.connect(self.item_clicked)

    def add_text(self):
        """点击添加按钮，把输入框的内容显示到list——widget"""
        # 1. 获取输入框中输入的内容
        text = self.input_text.text()
        if text == "请输入":
            QMessageBox.warning(self, "Warning", "内容为空")
        else:
            # 2. 把获取到的内容添加到list_widget上
            # 创建一个选项的对象
            item = QListWidgetItem(text)
            # 把对象添加到list——widgets上
            # additem接收一个QListWidgetItem的实例对象
            self.list_widget.addItem(item)
            self.input_text.clear()# 输入后清空输入框，别影响下次输入
            self.input_text.setText("请输入")

    def del_context(self):
        """删除list-widgtes上的项目"""
        # 1. 选中要删除的一项
        select_item = self.list_widget.currentItem()
        # 返回当前选中的行的索引
        print(self.list_widget.currentRow())
        # 通过选中的项查到当前的索引。 row()要接收一个选中的项的参数
        print(self.list_widget.row(select_item))
        # 2. 点击删除的按钮，进行删除
        if select_item:
            # 删除用的是takeitem(被删除项的索引)
            self.list_widget.takeItem(self.list_widget.currentRow())


    def clear_context(self):
        """清空list——widgets"""
        self.list_widget.clear()

    def item_clicked(self, item):
        """获取当前选中的项"""
        print(f"当前选中的是{item.text()}")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    sys.exit(app.exec())
